# Лекция: Spring Boot для тестировщика автоматизатора

Spring Boot - это проект, основанный на Spring, который обеспечивает автоматическую настройку Spring и простоту развертывания приложений Spring. Для тестировщика-автоматизатора знание Spring Boot может быть полезно при автоматизации тестирования REST API и интеграционного тестирования.

## Создание проекта Spring Boot

Самый простой способ создать проект Spring Boot - это использовать [Spring Initializr](https://start.spring.io/). Выберите необходимые параметры и зависимости (например, Spring Web и Spring Data JPA для веб-приложения с базой данных), а затем скачайте и распакуйте сгенерированный проект.

## Тестирование в Spring Boot

Spring Boot предоставляет поддержку для автоматического тестирования с помощью библиотеки JUnit. Вы можете создать тестовые классы в каталоге `src/test/java` вашего проекта.

```java
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class ApplicationTests {

    @Test
    void contextLoads() {
    }

}
```

В этом примере `@SpringBootTest` аннотация говорит Spring Boot запустить приложение для тестирования.

## Тестирование REST API

Для тестирования REST API вы можете использовать `MockMvc` для отправки HTTP-запросов и проверки HTTP-ответов.

```java
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.web.servlet.MockMvc;

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

@SpringBootTest
@AutoConfigureMockMvc
class ApplicationTests {

    @Autowired
    private MockMvc mockMvc;

    @Test
    void shouldReturnDefaultMessage() throws Exception {
        this.mockMvc.perform(get("/"))
                .andExpect(status().isOk());
    }

}
```

В этом примере `@AutoConfigureMockMvc` аннотация говорит Spring Boot настроить `MockMvc`. Затем `mockMvc.perform(get("/"))` отправляет GET-запрос на URL "/", и `andExpect(status().isOk())` проверяет, что статус код ответа равен 200 (OK).

---

# Практические задания

1. **Создайте проект Spring Boot с помощью Spring Initializr.** (Сложность: 1/5)

2. **Создайте тестовый класс с одним пустым тестовым методом.** (Сложность: 1/5)
```java
@SpringBootTest
class ApplicationTests {

    @Test
    void myFirstTest() {
    }

}
```

3. **Создайте тестовый класс, который тестирует, что приложение Spring Boot успешно загружается.** (Сложность: 1/5)
```java
@SpringBootTest
class ApplicationTests {

    @Test
    void contextLoads() {
    }

}
```

4. **Создайте тестовый класс, который тестирует, что GET-запрос на URL "/" возвращает статус код 200.** (Сложность: 2/5)
```java
@SpringBootTest
@AutoConfigureMockMvc
class ApplicationTests {

    @Autowired
    private MockMvc mockMvc;

    @Test
    void shouldReturnDefaultMessage() throws Exception {
        this.mockMvc.perform(get("/"))
                .andExpect(status().isOk());
    }

}
```

5. **Создайте тестовый класс, который тестирует, что GET-запрос на URL "/api/items" возвращает статус код 200 и JSON-массив.** (Сложность: 3/5)
```java
@SpringBootTest
@AutoConfigureMockMvc
class ApplicationTests {

    @Autowired
    private MockMvc mockMvc;

    @Test
    void shouldReturnItems() throws Exception {
        this.mockMvc.perform(get("/api/items"))
                .andExpect(status().isOk())
                .andExpect(content().contentType("application/json"));
    }

}
```